LINQ (Language Integrated Query) এর মাধ্যমে আপনি complex queries করতে পারেন এবং navigation properties ব্যবহার করে relational data সম্পর্কিত তথ্য পরিচালনা করতে পারেন। এর মাধ্যমে আপনি বিভিন্ন টেবিল বা ক্লাসের মধ্যে সম্পর্ক (relationships) খুঁজে বের করতে পারেন এবং প্রাসঙ্গিক ডেটা একত্রিত করতে পারেন।
LINQ তে complex queries বলতে বোঝানো হয় একাধিক শর্তের মধ্যে তথ্য অনুসন্ধান, বিভিন্ন অপারেশন একত্রে ব্যবহার করা, বা ডেটা ফিল্টারিং, গ্রুপিং এবং অর্ডারিং একত্রে করা। LINQ তে complex queries তৈরি করতে সাধারণত from
, where
, select
, group by
, order by
, join
, let
ইত্যাদি কিওয়ার্ড ব্যবহার করা হয়।
ধরা যাক, আমাদের দুটি তালিকা রয়েছে — একটিতে Employee
ক্লাসের তথ্য এবং অন্যটিতে Department
ক্লাসের তথ্য। এখন, আমরা কর্মীদের তথ্য ডিপার্টমেন্টের নামে সাজিয়ে দেখব।
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public int DepartmentId { get; set; }
}
public class Department
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
}
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Alice", Age = 30, DepartmentId = 1 },
new Employee { Name = "Bob", Age = 25, DepartmentId = 2 },
new Employee { Name = "Charlie", Age = 35, DepartmentId = 1 }
};
List<Department> departments = new List<Department>
{
new Department { DepartmentId = 1, DepartmentName = "HR" },
new Department { DepartmentId = 2, DepartmentName = "IT" }
};
// Complex query: Join Employee এবং Department ক্লাসের ডেটা
var query = from emp in employees
join dept in departments on emp.DepartmentId equals dept.DepartmentId
orderby dept.DepartmentName
select new { emp.Name, emp.Age, dept.DepartmentName };
foreach (var item in query)
{
Console.WriteLine($"Name: {item.Name}, Age: {item.Age}, Department: {item.DepartmentName}");
}
এখানে:
join
কিওয়ার্ড ব্যবহার করে Employee
এবং Department
ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়েছে।orderby
দ্বারা ডিপার্টমেন্টের নাম অনুযায়ী কর্মীদের সাজানো হয়েছে।আউটপুট:
Name: Alice, Age: 30, Department: HR
Name: Charlie, Age: 35, Department: HR
Name: Bob, Age: 25, Department: IT
এটি একটি complex query উদাহরণ যেখানে একাধিক শর্তের মধ্যে ডেটা সংগ্রহ করা হয়েছে এবং বিভিন্ন অপারেশন একত্রে ব্যবহার করা হয়েছে।
Navigation properties একটি ORM (Object-Relational Mapping) সিস্টেমের মাধ্যমে এক ক্লাস বা টেবিলের মধ্যে সম্পর্কিত অন্যান্য ক্লাস বা টেবিলের তথ্য প্রদর্শন করতে ব্যবহৃত হয়। Entity Framework (EF) Core এর মাধ্যমে, আপনি navigation properties ব্যবহার করে একটি ক্লাসের মধ্যে সম্পর্কিত অন্য ক্লাসের ডেটা রিট্রিভ করতে পারেন।
ধরা যাক, আমাদের একটি Student
এবং Course
ক্লাস আছে এবং আমরা জানি যে, এক ছাত্র একাধিক কোর্সে ভর্তি হতে পারে। এখানে Student
এবং Course
এর মধ্যে one-to-many relationship রয়েছে।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; } // Navigation property
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public int StudentId { get; set; }
public Student Student { get; set; } // Navigation property
}
List<Student> students = new List<Student>
{
new Student { StudentId = 1, Name = "Alice", Courses = new List<Course> {
new Course { CourseId = 1, CourseName = "Math" },
new Course { CourseId = 2, CourseName = "English" }
}},
new Student { StudentId = 2, Name = "Bob", Courses = new List<Course> {
new Course { CourseId = 3, CourseName = "Physics" },
new Course { CourseId = 4, CourseName = "Chemistry" }
}}
};
// Navigation property ব্যবহার করে Student এর Courses দেখতে হবে
var query = from student in students
select new
{
student.Name,
Courses = student.Courses.Select(c => c.CourseName)
};
foreach (var item in query)
{
Console.WriteLine($"Student: {item.Name}");
foreach (var course in item.Courses)
{
Console.WriteLine($" Course: {course}");
}
}
এখানে:
Courses
হল একটি navigation property যা Student
ক্লাসের মধ্যে সম্পর্কিত Course
ক্লাসের তথ্য ধরে রাখে।student.Courses.Select(c => c.CourseName)
ব্যবহার করে, ছাত্রদের কোর্সের নাম বের করা হচ্ছে।আউটপুট:
Student: Alice
Course: Math
Course: English
Student: Bob
Course: Physics
Course: Chemistry
এখানে Courses
প্রপার্টি Student
ক্লাসের navigation property, যা Student
এবং Course
ক্লাসের মধ্যে সম্পর্কিত তথ্য তুলে ধরছে।
Entity Framework এ One-to-Many সম্পর্কের মধ্যে Student
এবং Course
ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়, যেখানে একটি ছাত্র একাধিক কোর্সে ভর্তি হতে পারে।
public class ApplicationDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(s => s.Courses)
.WithOne(c => c.Student)
.HasForeignKey(c => c.StudentId);
}
}
এখানে:
HasMany(s => s.Courses)
বলে, একটি Student
এর অনেকগুলো Course
থাকতে পারে।WithOne(c => c.Student)
বলে, প্রতিটি Course
এর একটিমাত্র Student
থাকতে হবে।এখন, যদি আপনি complex query করতে চান যেখানে navigation properties ব্যবহার করা হচ্ছে, যেমন, সমস্ত ছাত্র এবং তাদের কোর্সের নাম বের করতে:
var query = from student in students
select new
{
student.Name,
Courses = student.Courses.Select(c => c.CourseName)
};
foreach (var item in query)
{
Console.WriteLine($"Student: {item.Name}");
foreach (var course in item.Courses)
{
Console.WriteLine($" Course: {course}");
}
}
এখানে, Student
এর Courses
নামক navigation property ব্যবহার করে ছাত্রদের কোর্সের নাম বের করা হয়েছে।
এটি ডেটাবেসের মধ্যে সম্পর্কিত তথ্যকে কোয়েরি করার এবং সম্পর্কিত ডেটা একত্রিত করার একটি শক্তিশালী পদ্ধতি।
common.read_more